/**
 * @file 校验规则
 * @author lishaohai
 */
import moment from 'moment';

/**
 * 校验stage
 * @param {*} rule 规则
 * @param {Array} value 值
 * @param {Function} callback 回调函数
 */
export const validateStages = (rule, value, callback) => {
    const newVal = value || [];
    const length = newVal.length;
    if (length === 0) {
        return callback(new Error('分期账单为空'));
    }
    const reg = /^[0-9]+(\.[0-9]{0,2})?$/;
    let errorText = null;

    for (let index = 0; index < length; index++) {
        const item = newVal[index];
        if (!reg.test(item.cash)) {
            errorText = `分期账单第 ${item.stage}/${length} 器应还金额不合法，应为0-2位小数的正实数`;
            break;
        }
    }
    if (errorText) {
        return callback(new Error(errorText));
    }

    callback();
};

/**
 * 校验stage
 * @param {*} rule 规则
 * @param {Date} value 值
 * @param {Function} callback 回调函数
 */
export const validateStartTime = (rule, value, callback) => {
    const day = moment(value).format('DD') - 0;
    if (day > 28) {
        return callback(new Error('开始还款日期应为每月的28号之前（包含28号）'));
    }
    callback();
};

/**
 *借款金额必须是0~2位小数的正实数
 * @param {*} rule 规则
 * @param {number} value 借款金额
 * @param {Function} callback 回调函数
 */
export const validateTotal = (rule, value, callback) => {
    const reg = /^[0-9]+(\.[0-9]{0,2})?$/;
    if (!reg.test(value) || value - 0 < 0) {
        return callback(new Error('借款金额应为0-2位小数的正实数'));
    }
    callback();
};

/**
 * 校验合计需还必须是0~2位小数的正实数
 * @param {*} rule 规则
 * @param {number} value 合计需还
 * @param {Function} callback 回调函数
 */
export const validateTotalAll = (rule, value, callback) => {
    const reg = /^[0-9]+(\.[0-9]{0,2})?$/;
    if (!reg.test(value) || value - 0 < 0) {
        return callback(new Error('合计需还金额应为0-2位小数的正实数'));
    }
    callback();
};

/**
 * 校验综合年化费率还必须是0~2位小数的正实数
 * @param {*} rule 规则
 * @param {number} value 综合年化费率
 * @param {Function} callback 回调函数
 */
export const validateRate = (rule, value, callback) => {
    const reg = /^[0-9]+(\.[0-9]{0,2})?$/;
    if (!reg.test(value)) {
        return callback(new Error('综合年化费率应为0-2位小数的正实数'));
    }
    callback();
};

/**
 * 总分期数
 * @param {*} rule 规则
 * @param {Array} value 总分期数 数组
 * @param {Function} callback 回调函数
 */
export const validateStageTotal = (rule, value, callback) => {
    if (value <= 0) {
        return callback(new Error('总分期数不能小于等于0'));
    }
    const reg = /^\+?[1-9][0-9]*$/;
    if (!reg.test(value)) {
        return callback(new Error('总分期数为正整数'));
    }
    callback();
};

/**
 * 借款金额必须是0~2位小数数字
 * @param {*} rule 规则
 * @param {number} value 借款金额
 * @param {Function} callback 回调函数
 */
export const validateNumber = (rule, value, callback, message) => {
    if (typeof value === 'string' && value.length > 0 && value.includes('-')) {
        value = value.substr(1);
    }
    const reg = /^[0-9]+(\.[0-9]{0,2})?$/;
    if (!reg.test(value)) {
        return callback(new Error(`${message}应为0-2位小数的数字`));
    }
    callback();
};
